# -*- encoding: utf-8 -*-
'''
file       :public.py
Description: 公共函数存放位置
Date       :2022/12/22 09:36:35
Author     :Josco
version    :python3.7.8
'''
from config import *
import os


def load_ori_and_shoot_pic(ori_pic_file_path, pic_file_path):
    """
        desc: 根据原始图像存储路径和拍摄后的照片路径获取对应的照片
        param:
            ori_pic_file_path: 原始图像路径
            pic_file_path: 拍摄后的照片存储路径
    """
    ori_file_list = []  # 存储原始图像的路径
    shoot_pic_list = []  # 存储拍摄后图像的路径
    # 获取原始图像路径下的所有图像
    for top, dirs, nondirs in os.walk(ori_pic_file_path):
        for item in nondirs:
            if item.split('.')[-1] == "bmp":
                ori_file_list.append(os.path.join(top, item))
    # 获取拍摄后图像路径下的所有图像
    for top, dirs, nondirs in os.walk(pic_file_path):
        for item in nondirs:
            if item.split('.')[-1] == "bmp":
                shoot_pic_list.append(os.path.join(top, item))
    return ori_file_list, shoot_pic_list

def color_to_num(mat, r_thr = r_threshold, g_thr = g_threshold, b_thr = b_threshold):
    """使用此函数把矩阵中的0-255的值映射到0或255"""
    mat_b = mat[:, :, 0]  # 得到蓝色通道
    mat_g = mat[:, :, 1]  # 得到绿色通道
    mat_r = mat[:, :, 2]  # 得到红色通道

    mat_b = np.where((mat_b >= 0) & (mat_b < b_thr), 0, mat_b)
    mat_b = np.where((mat_b >= b_thr) & (mat_b <= 255), 255, mat_b)

    mat_g = np.where((mat_g >= 0) & (mat_g < g_thr), 0, mat_g)
    mat_g = np.where((mat_g >= g_thr) & (mat_g <= 255), 255, mat_g)

    mat_r = np.where((mat_r >= 0) & (mat_r < r_thr), 0, mat_r)
    mat_r = np.where((mat_r >= r_thr) & (mat_r <= 255), 255, mat_r)
    mat = np.dstack((mat_b, mat_g, mat_r))

    return mat

def point_color_to_normal(point_color):
    """取一个点的颜色， 并把该颜色归一化，
    归一化的规则:
        (1)为当最大的色值大于最小和中间的色值40个色值时, 最小和中间的值直接置为0;
        (2)经过步骤1后进行初步判定后的结果与rgb三色的阈值进行比较, 若大于阈值则置为0, 小于则置为255
    """
    b = point_color[0]
    g = point_color[1]
    r = point_color[2]
    if b < b_threshold:
        b = 0
    else:
        b = 255
    if g < g_threshold:
        g = 0
    else:
        g = 255
    if r < r_threshold:
        r = 0
    else:
        r = 255
    return [b, g, r]